#ifndef	wyGPT_included
#define	wyGPT_included
#define	wyGPT_layers	5
template<uint32_t	R,	uint32_t	C,	uint32_t	H,	uint32_t	S>
struct	wyGPT {
    gema<R,C,H,S>	a;
    gema<R,C,H,S>	b;
    gemat<R,C,H,S>	c;
    gema<R,C,H,S>	d;
    gema<R,C,H,S>	e;

    void	save(FILE	*F) {
        a.save(F);
        b.save(F);
        c.save(F);
        d.save(F);
        e.save(F);
    }

    void	load(FILE	*F) {
        a.load(F);
        b.load(F);
        c.load(F);
        d.load(F);
        e.load(F);
    }

    uint64_t	size(void) {
        return	a.size()+b.size()+c.size()+d.size()+e.size();
    }

    void	fw(tensor<half,R*C>	&inp) {
        a.fw(inp);
        b.fw(inp);
        c.fw(inp);
        d.fw(inp);
        e.fw(inp);
    }

    void	bk(tensor<half,R*C>	&gin) {
        e.bk(gin);
        d.bk(gin);
        c.bk(gin);
        b.bk(gin);
        a.bk(gin);
    }
};

#endif

